/*
* 参数设置管理模块
*/
const express = require('express');
const router = express.Router();
// 引入数据库
const db = require("../../config/db");
// 引入时间包
const moment = require("moment");
// 引入方法库
const { toCamelCase, toUnderlineCase, verifyToken} = require("../../config/utils");
// 引入日志
const log = require("../log");

// 根据参数键名查询参数值
router.get("/configKey/:key", async (req, res) => {
    console.log("===========根据参数键名查询参数值============");
    // 获取参数
    let { key } = req.params;
    // 查询数据库
    let sql = `select config_value from sys_config where config_key = '${key}'`;
    db.query("查询参数设置列表", sql, (err, result) =>{
        if(err){
            res.send({code: 500, msg: "查询参数设置列表失败", data: err});
            return
        }
        if(result.length > 0){
             // 变量Json数组key转成下划线第一个大写
             result = result.map(item => {
                return toCamelCase(item)
            })
            res.send({code: 200, msg: result[0].configValue, data: result });
        }else{
            res.send({code: 200, msg: "查询参数设置列表成功", data: []})
        }
    })
})

// 获取所有参数设置列表
router.get("/list", async (req, res) => {
    console.log("===========获取参数设置列表接口============");
    // 获取参数
    let { pageNum, pageSize, configName, configKey, configType, params } = req.query;
    // 拼接sql语句
    let sql = "select * from sys_config";
    let sql_where = ` where 1=1`;
    if(configKey){
        sql_where += ` and config_key like '%${configKey}%'`;
    }
    if(configName){
        sql_where += ` and config_name like '%${configName}%'`;
    }
    if(configType){
        sql_where += ` and config_type = '${configType}'`;
    }
    if(params){
        sql_where += ` and create_time between '${params['beginTime']}' and  '${params['endTime']}'`;
    }
    if(configKey || configName || configType || params){
        sql += sql_where;
    }
    
    // 分页
    sql += ` limit ${(pageNum-1)*pageSize}, ${pageSize}`;
    // 查询数据库
    db.query("查询参数设置列表", sql, (err, result)=>{
        if(err){
            res.send({code: 500, msg: "查询参数设置列表失败", data: err});
            return;
        }
        // 查询总数
        db.query("查询参数设置总数", `select count(*) as count from sys_config ${sql_where}`, (err, count)=>{
            if(err){
                res.send({code: 500, msg: "查询参数设置总数失败", data: err});
                return;
            }
            if(result.length > 0){
                 // 变量Json数组key转成下划线第一个大写
                 result = result.map(item => {
                    return toCamelCase(item)
                })
                res.send({code: 200, msg: "查询参数设置列表成功", rows: result, total: count[0].count});
            }else{
                res.send({code: 200, msg: "查询参数设置列表成功", rows: [], total: 0});
            }
        })
    })
})

// 新增参数设置列表
router.post("/", (req, res)=>{
    console.log("===========新增参数设置列表接口============");
    // 获取参数
    let {configName, configType, configKey, configValue, remark} = req.body;
    // 获取创建人
    let {username} = verifyToken(req.headers.authorization);
    // 获取创建时间
    let createTime = moment().format("YYYY-MM-DD HH:mm:ss");
    // 判断参数名称和参数键名是否重复
    db.query("查询参数名称和参数键名是否重复", `select * from sys_config where config_name = '${configName}' or config_key = '${configKey}'`, (err, sql_check_result)=>{
        if(err){
            res.send({code: 500, msg: "查询参数名称和参数键名是否重复失败", data: err});
            return;
        }
        if(sql_check_result.length > 0){
            res.send({code: 500, msg: "参数名称或参数键名已存在"});
            return;
        }
        // 插入数据库
        let sql = `insert into sys_config (config_name, config_type, config_key, config_value, remark, create_by, create_time)
        values 
        ('${configName}', '${configType}', '${configKey}', '${configValue}',
         ${remark ? "'"+remark+"'" : null}, '${username}', '${createTime}')`;
        db.query("新增参数设置列表", sql, (err, result)=>{
            if(err){
                res.send({code: 500, msg: "新增参数设置列表失败", data: err});
                return;
            }
            if(result.affectedRows > 0){
                res.send({code: 200, msg: "新增参数设置列表成功"});
            }else{
                res.send({code: 500, msg: "新增参数设置列表失败"});
            }
        })
    })
})

// 查询单个参数设置列表
router.get(/^\/(\d+)$/, (req, res) => {
    console.log("===========查询单个参数设置列表接口，正则匹配============");
    // 获取参数
    let url_arr = req.url.split("/");
    const id = url_arr[url_arr.length - 1];
   
    db.query("查询单个参数设置列表", `select * from sys_config where config_id = ${id}`, (err, result)=>{
        if(err){
            res.send({code: 500, msg: "查询单个参数设置列表失败", data: err});
            return;
        }
        if(result.length > 0){
            // 变量Json数组key转成下划线第一个大写
            result = result.map(item => {
                return toCamelCase(item)
            })
            res.send({code: 200, msg: "查询单个参数设置列表成功", data: result[0]});
        }else{
            res.send({code: 500, msg: "查询单个参数设置列表失败"});
        }
    })
})

// 修改参数设置列表
router.put("/", (req, res)=>{
    console.log("===========修改参数设置列表接口============");
    // 获取参数
    let {configName, configType, configKey, configValue, remark, configId} = req.body;
    // 获取修改人
    let {username} = verifyToken(req.headers.authorization);
    // 获取修改时间
    let updateTime = moment().format("YYYY-MM-DD HH:mm:ss");
    // 判断参数名称和参数键名是否重复
    db.query("查询参数名称和参数键名是否重复", `select * from sys_config where config_id != ${configId} and ( config_name = '${configName}' or config_key = '${configKey}' )`, (err, result)=>{
        if(err){
            res.send({code: 500, msg: "查询参数名称和参数键名是否重复失败", data: err});
            return;
        }
        if(result.length > 0){
            res.send({code: 500, msg: "参数名称或参数键名已存在", data: []});
            return;
        }
        // 修改参数设置列表sql
        let sql = `update sys_config set config_name = '${configName}',  config_type = '${configType}', config_key = '${configKey}', config_value = '${configValue}',
        remark=${remark ? "'"+remark+"'" : null}, update_by = '${username}', update_time = '${updateTime}'
        where config_id = ${configId}`;
        db.query("修改参数设置列表", sql, (err, result)=>{
            if(err){
                res.send({code: 500, msg: "修改参数设置列表失败", data: err});
                return;
            }
            if(result.affectedRows > 0){
                res.send({code: 200, msg: "修改参数设置列表成功", data: []});
            }else{
                res.send({code: 500, msg: "修改参数设置列表失败", data: []});
            }
        })
    })
})

// 删除参数设置列表
router.delete("/:id", (req, res) => {
    console.log("===========删除参数设置列表接口============");
    // 获取参数
    let {id} = req.params;
     // 拼接sql,删除多条数据
     let sql = `delete from sys_config where config_id in(${id})`;
    // 查询数据库
    db.query("删除参数设置列表", sql, (err, result) => {
        if (err) {
            res.send({code: 500, msg: "删除参数设置列表失败", data: err});
            return
        }
        if(result.affectedRows > 0){
            res.send({code: 200, msg: "删除参数设置列表成功"})
        }else{
            res.send({code: 500, msg: "删除参数设置列表失败"})
        }
    })
})

module.exports = router;
